const POINT_STYLE = {
    Angle: 0,
    Color: 11, //子图颜色
    Space: 0,
    SymHeight: 12,
    SymID: 3, //子图号
    SymWidth: 12
}
/* attr = [{type:"string",value:"武汉",name:"name"}] */
/**
 * @param {Array} position [114,30]
 * @param {Array} attr [{type:"string",value:"武汉",name:"name"}]
 * @param {Object} service ={name:"ig服务名称",layerId:"要素所在的图层"}
 * @param {object} docLayer  地图文档的图层
 */
class Point {
    static add({ position, attr, service, docLayer }) {
        var gpoint = new Zondy.Object.GPoint(position[0], position[1]);//createPoint();
        //设置当前点要素的几何信息
        var fGeom = new Zondy.Object.FeatureGeometry({ PntGeom: [gpoint] });
        /* style */
        var pointInfo = new Zondy.Object.CPointInfo(POINT_STYLE);
        //设置当前点要素的图形参数信息
        var webGraphicInfo = new Zondy.Object.WebGraphicsInfo({
            /* 1--Point  2--LineString 3--Area */
            InfoType: 1,
            PntInfo: pointInfo
        });
        /* attr */
        //设置添加点要素的属性信息        
        var attValue = attr.map(item => item.value)
        //创建一个要素
        var feature = new Zondy.Object.Feature({
            fGeom: fGeom,
            GraphicInfo: webGraphicInfo,
            AttValue: attValue
        });
        //设置要素为点要素
        feature.setFType(1);
        /* 2、构建要素集 --ol-source */
        var featureSet = new Zondy.Object.FeatureSet();
        //设置属性结构
        /* 要素集的字段名和字段类型要和mapgis图层映射 */
        var cAttStruct = new Zondy.Object.CAttStruct({
            FldName: attr.map(item => item.name),
            FldNumber: attr.length,
            FldType: attr.map(item => item.type)
        });
        featureSet.AttStruct = cAttStruct;
        //添加要素到要素数据集
        featureSet.addFeature(feature);

        /* 3、调用服务,添加要素 */
        //创建一个编辑服务类
        /* 第一个参数是ig server服务的名称 */
        /* 第二个参数是图层所在的位置 下标从0开始 */
        var editService = new Zondy.Service.EditDocFeature(
            service.name, service.layerId, {

        }
        );
        //执行添加点要素功能
        editService.add(featureSet, this.onPntSuccess(docLayer));
    }

    static onPntSuccess(docLayer) {
        return function (data) {
            if (data.succeed) {
                alert("添加点要素成功！");
                docLayer.refresh();
            } else {
                alert("添加点要素失败！");
            }
        }

    }

    static query({
        position,
        service,
        callback
    }) {
        pointObj = new Zondy.Object.Point2D(position[0], position[1]);
        //设置查询点的搜索半径
        pointObj.nearDis = 1;
        /* core-code end */
        //初始化查询结构对象，设置查询结构包含几何信息
        var queryStruct = new Zondy.Service.QueryFeatureStruct();
        //是否包含几何图形信息
        queryStruct.IncludeGeometry = true;
        //是否包含属性信息
        queryStruct.IncludeAttribute = true;
        //是否包含图形显示参数
        queryStruct.IncludeWebGraphic = false;
        //指定查询规则
        var rule = new Zondy.Service.QueryFeatureRule({
            //是否将要素的可见性计算在内
            EnableDisplayCondition: false,
            //是否完全包含
            MustInside: false,
            //是否仅比较要素的外包矩形
            CompareRectOnly: false,
            //是否相交
            Intersect: true
        });
        //实例化查询参数对象
        var queryParam = new Zondy.Service.QueryParameter({
            geometry: pointObj,
            resultFormat: "json",
            struct: queryStruct,
            rule: rule
        });
        //设置查询分页号
        queryParam.pageIndex = 0;
        //设置查询要素数目
        queryParam.recordNumber = 20;
        //实例化地图文档查询服务对象
        var queryService = new Zondy.Service.QueryDocFeature(queryParam, service.name, service.layerId, {

        });
        //执行查询操作，querySuccess为查询回调函数
        queryService.query(callback);
    }
}